package dao

import (
	"time"
)

// 这是 Book 的全局公开dao对象，被service层调用!
var BookDao = bookDao{}

// 图书表
// 这是 book表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Book struct {
	Id            int32     `json:"id" form:"id" db:"id" v:"id"`
	Name          string    `json:"name" form:"name" db:"name" v:"name"`                                             // 书名
	Ename         string    `json:"ename" form:"ename" db:"ename" v:"ename"`                                         // 英文书名
	Lang          int8      `json:"lang" form:"lang" db:"lang" v:"lang"`                                             // 语言:0-中文,1-英文
	Author        string    `json:"author" form:"author" db:"author" v:"author"`                                     // 作者
	Translator    string    `json:"translator" form:"translator" db:"translator" v:"translator"`                     // 译者
	Cover         string    `json:"cover" form:"cover" db:"cover" v:"cover"`                                         // 封面
	PubDate       string    `json:"pub_date" form:"pub_date" db:"pub_date" v:"pub_date"`                             // 出版日期,2017-04-01
	Desc          string    `json:"desc" form:"desc" db:"desc" v:"desc"`                                             // 简介
	Catalogue     string    `json:"catalogue" form:"catalogue" db:"catalogue" v:"catalogue"`                         // 目录
	Tags          string    `json:"tags" form:"tags" db:"tags" v:"tags"`                                             // tag,逗号分隔
	IsFree        int8      `json:"is_free" form:"is_free" db:"is_free" v:"is_free"`                                 // 是否免费,0-否,1-是
	OnlineUrl     string    `json:"online_url" form:"online_url" db:"online_url" v:"online_url"`                     // 在线阅读url
	DownloadUrl   string    `json:"download_url" form:"download_url" db:"download_url" v:"download_url"`             // 下载url
	BuyUrl        string    `json:"buy_url" form:"buy_url" db:"buy_url" v:"buy_url"`                                 // 购买url
	Price         float64   `json:"price" form:"price" db:"price" v:"price"`                                         // 参考价格
	LastReplyUid  int32     `json:"last_reply_uid" form:"last_reply_uid" db:"last_reply_uid" v:"last_reply_uid"`     // 最后回复者
	LastReplyTime time.Time `json:"last_reply_time" form:"last_reply_time" db:"last_reply_time" v:"last_reply_time"` // 最后回复时间
	ViewNum       int32     `json:"view_num" form:"view_num" db:"view_num" v:"view_num"`                             // 浏览数
	CmtNum        int32     `json:"cmt_num" form:"cmt_num" db:"cmt_num" v:"cmt_num"`                                 // 评论数
	LikeNum       int32     `json:"like_num" form:"like_num" db:"like_num" v:"like_num"`                             // 点赞数
	Uid           int32     `json:"uid" form:"uid" db:"uid" v:"uid"`                                                 // 分享人uid
	CreatedAt     time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`                     // 创建时间
	UpdatedAt     time.Time `json:"updated_at" form:"updated_at" db:"updated_at" v:"updated_at"`                     // 最后更新时间

}

// 注意:这是 Book 的私有dao对象，只能在dao层内使用!
type bookDao struct {
	InsertTemplate func(arg Book) (int64, error)      //插入一条记录
	UpdateTemplate func(arg Book) (int64, error)      //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Book, error)       `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg BookList) ([]Book, error) //模糊分页查询
}

/*
// 这是 book 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type BookPostman struct {
id
name
ename
lang
author
translator
cover
pub_date
desc
catalogue
tags
is_free
online_url
download_url
buy_url
price
last_reply_uid
last_reply_time
view_num
cmt_num
like_num
uid
created_at
updated_at

}*/

// 这是 book 表的批量请求参数
type BookReq struct {
	List []Book `json:"list" form:"list"`
}

// 这是 bookDao.List()方法的请求参数
type BookList struct {
	Page
}
